/* $Id: plugadder,v 1.46 1999/03/19 00:13:57 donwm Exp $ */
/* Copyright (C) 1995 - 1999, Hewlett-Packard Company, all rights reserved. */
/* Written by Keith Bayern */

/* VXIplug&play Instrument Driver for the HP E1432A */

#ifndef hpe1432_INCLUDE 
#define hpe1432_INCLUDE
#include "visa.h"

#if defined(__cplusplus) || defined(__cplusplus__)
extern "C" {
#endif




#define VI_WARN_NSUP_ID_QUERY       (0x30101)
#define VI_WARN_NSUP_RESET          (0x30102)
#define VI_WARN_NSUP_SELF_TEST      (0x30103)
#define VI_WARN_NSUP_ERROR_QUERY    (0x30104)
#define VI_WARN_NSUP_REV_QUERY      (0x30105)

#define VI_ERROR_PARAMETER1         (_VI_ERROR+0xB0001)
#define VI_ERROR_PARAMETER2         (_VI_ERROR+0xB0002)
#define VI_ERROR_PARAMETER3         (_VI_ERROR+0xB0003)
#define VI_ERROR_PARAMETER4         (_VI_ERROR+0xB0004)
#define VI_ERROR_PARAMETER5         (_VI_ERROR+0xB0005)
#define VI_ERROR_PARAMETER6         (_VI_ERROR+0xB0006)
#define VI_ERROR_PARAMETER7         (_VI_ERROR+0xB0007)
#define VI_ERROR_PARAMETER8         (_VI_ERROR+0xB0008)
#define VI_ERROR_FAIL_ID_QUERY      (_VI_ERROR+0xB0011)
#define VI_ERROR_INV_RESPONSE       (_VI_ERROR+0xB0012)
#define VI_ERROR_CALIBRATION_FAILURE (_VI_ERROR+0xB0013)

#define	HPE1432_IRQ_MEAS_WARNING		0x0100
#define	HPE1432_IRQ_BLOCK_READY		0x0200
#define	HPE1432_IRQ_MEAS_STATE_CHANGE	0x0400
#define	HPE1432_IRQ_TRIGGER		0x0800
#define	HPE1432_IRQ_OVERLOAD_CHANGE	0x1000
#define	HPE1432_IRQ_MEAS_ERROR		0x2000
#define	HPE1432_IRQ_TACHS_AVAIL		0x4000
#define HPE1432_IRQ_SRC_STATUS            0x8000

#define  HPE1432_PEAK_MODE_ON  581
#define  HPE1432_RMS_MODE_ON  591

#define HPE1432_STATUS2_TACH_OVERFLOW	0x0001
#define HPE1432_STATUS2_FIFO_EMPTIED	0x0002


#define	HPE1432_MEAS_STATE_MASK		0x001f
#define	HPE1432_MEAS_STATE_TESTED	0x0000
#define	HPE1432_MEAS_STATE_BOOTING	0x0001
#define	HPE1432_MEAS_STATE_BOOTING_WAIT1	0x0002
#define	HPE1432_MEAS_STATE_BOOTING_WAIT2	0x0003
#define	HPE1432_MEAS_STATE_BOOTED	0x0004
#define	HPE1432_MEAS_STATE_SYNC		0x0005
#define	HPE1432_MEAS_STATE_SYNC_WAIT1	0x0006
#define	HPE1432_MEAS_STATE_PRE_ARM	0x0007
#define	HPE1432_MEAS_STATE_PRE_ARM_WAIT2	0x0008
#define	HPE1432_MEAS_STATE_IDLE		0x0009
#define	HPE1432_MEAS_STATE_ARM		0x000a
#define	HPE1432_MEAS_STATE_ARM_WAIT1	0x000b
#define	HPE1432_MEAS_STATE_ARM_WAIT2	0x000c
#define	HPE1432_MEAS_STATE_TRIGGER	0x000d
#define	HPE1432_MEAS_STATE_CONVERT	0x000e
#define	HPE1432_MEAS_STATE_CONVERT_WAIT1	0x000f
#define	HPE1432_MEAS_STATE_CONVERT_WAIT2	0x0010
#define	HPE1432_MEAS_STATE_DUMMY	0x0011
#define	HPE1432_MEAS_STATE_ERROR	0x0012
#define	HPE1432_MEAS_STATE_ERROR_WAIT1	0x0013
#define	HPE1432_MEAS_STATE_ERROR_WAIT2	0x0014
#define	HPE1432_MEAS_STATE_DUMMY2	0x0015
#define	HPE1432_MEAS_STATE_TPUT		0x0016
#define	HPE1432_MEAS_STATE_MAX		0x0017


#define HPE1432_SRCBUF_RDY		0x00000000L
#define HPE1432_SRCBUF_AVAIL		0x00000001L
#define HPE1432_SRCBUF_FULL		0x00000002L
#define HPE1432_SRCBUF_OUT		0x00000004L

#define HPE1432_TACH_RAW_SIZE             16384
#define HPE1432_TACH_WRAP_COUNT		4294967296.0

/* duplicate of manual trigger */
#define HPE1432_TACH_EDGE_TRIGGER         440

#define	HPE1432_TRAILER_INFO_NOT_UNDERRANGE	0x0001
#define	HPE1432_TRAILER_INFO_OVERLOAD		0x0002
#define	HPE1432_TRAILER_INFO_OVERLOAD_COMM	0x0004
#define	HPE1432_TRAILER_INFO_TRIGGER		0x0008
#define	HPE1432_TRAILER_INFO_SETTLED		0x0010
#define	HPE1432_TRAILER_INFO_STOP			0x0020
#define	HPE1432_TRAILER_INFO_OT_RAMP_TOO_FAST	0x0040
#define	HPE1432_TRAILER_INFO_EXTEND		0x0080
#define	HPE1432_TRAILER_INFO_DEC_2_MASK		0x1f00
#define	HPE1432_TRAILER_INFO_DEC_2_SHIFT		8
#define	HPE1432_TRAILER_INFO_DEC_5		0x2000

#define	HPE1432_TTLTRG_01			250
#define	HPE1432_TTLTRG_23			251
#define	HPE1432_TTLTRG_45			252
#define	HPE1432_TTLTRG_67			253

/* SCA IDs */
#define	HPE1432_SCA_ID_UNKNOWN		-1    /* unknown whether SCA present */
#define	HPE1432_SCA_ID_IGNORE		0     /* disregard this SCA */
#define	HPE1432_SCA_ID_NONE		0x1f  /* no SCA present */
#define	HPE1432_SCA_ID_INPUT		0x18  /* undetermined input SCA */
#define	HPE1432_SCA_ID_SOURCE		0x19  /* undetermined source SCA */
#define	HPE1432_SCA_ID_TACH		4
#define	HPE1432_SCA_ID_CLARINET		6
#define	HPE1432_SCA_ID_VIBRATO		10
#define	HPE1432_SCA_ID_SONATA		12
#define	HPE1432_SCA_ID_SONATA_A		12
#define	HPE1432_SCA_ID_SONATA_B		13
#define	HPE1432_SCA_ID_CLARION		7

#define	HPE1432_DRAM_UNKNOWN		-1
#define	HPE1432_DRAM_IGNORE		0
#define	HPE1432_DRAM_4M			4
#define	HPE1432_DRAM_32M		32

/* Smart break-out box IDs */
#define HPE1432_BOB_ID_NONE		0
#define HPE1432_BOB_ID_CHARGE_PROTO	254
#define HPE1432_BOB_ID_MIKE_PROTO	253
#define HPE1432_BOB_ID_CHARGE		252
#define HPE1432_BOB_ID_MIKE		251
#define	HPE1432_BOB_ID_CHARGE2		250
#define	HPE1432_BOB_ID_MIKE2		249

/* Channel software characteristics */
#define	HPE1432_CHAN_TYPE_INPUT		0
#define	HPE1432_CHAN_TYPE_SOURCE	1
#define	HPE1432_CHAN_TYPE_TACH		2
#define	HPE1432_CHAN_TYPE_OTHER		3

#define HPE1432_OCTAVE_INT_TIME_STEP        2.0
#define HPE1432_WINDOW_SIZE_MAX             8192

/* VXI Address offsets of registers from module base address */
/* VXI Configuration registers */
#define	HPE1432_ID_REG			0
#define	HPE1432_LOGICAL_ADDRESS_REG	0
#define	HPE1432_DEVICE_TYPE_REG		2
#define	HPE1432_STATUS_REG		4
#define	HPE1432_CONTROL_REG		4
#define	HPE1432_OFFSET_REG		6
#define	HPE1432_PORT_CTL_REG		8
#define	HPE1432_PAGE_MAP_REG		10
#define	HPE1432_IRQ_CONFIG_REG		12
#define	HPE1432_IRQ_STATUS_REG		14
#define	HPE1432_IRQ_STATUS2_REG		16
#define	HPE1432_MEAS_STATE_REG		20
#define	HPE1432_FIFO_DATA_REG		24
#define	HPE1432_FIFO_COUNT_REG		30


#define HPE1432_NO_WARNING				0
#define HPE1432_LOST_NOT_ENOUGH_TACHS           	1
#define HPE1432_LOST_TOO_MANY_TACHS 	          	2
#define HPE1432_LOST_TOO_MANY_POINTS_REQUIRED   	3
#define HPE1432_LOST_DATA_SHIFTED_OUT_FIFO      	4
#define HPE1432_LOST_NOT_ENOUGH_DATA_FIFO       	5
#define HPE1432_LOST_RPM_TOO_HIGH               	6
#define HPE1432_LOST_RPM_TOO_LOW                	7
#define HPE1432_LOST_RESAMPLE_ERROR             	8
#define HPE1432_LOST_FIFO_EMPTIED			9
#define HPE1432_RPM_RAMP_TOO_FAST			10



/* misc defines, may be superfluous */

#define HPE1432_AC_RANGING_TIME 	 2.0
#define HPE1432_AC_SETTLING_TIME 	 15.0
#define HPE1432_ANALOG_DELAY 	 (11.925E-6)
#define HPE1432_CONTROL_A24_ENABLE 	 0x8000
#define HPE1432_CONTROL_RESET_OFF 	 0x0000
#define HPE1432_CONTROL_RESET_ON 	 0x0001
#define HPE1432_CONTROL_SYSFAIL_INHIBIT_OFF 	 0x0000
#define HPE1432_CONTROL_SYSFAIL_INHIBIT_ON 	 0x0002
#define	HPE1432_CVT_DATA_OVLD		1000000.0f
#define	HPE1432_CVT_DATA_NONE		-1000000.0f
#define HPE1432_DATA_MODE_OVERLAP_FREERUN 	 343
#define	HPE1432_DATA_SIZE_FRACT  758 /* internal use only */
#define HPE1432_DATA_SIZE_NONE 	 330
#define HPE1432_DATA_USER1 	 730
#define HPE1432_DATA_USER2 	 731
#define HPE1432_DECIMATION_MAX 	 16
#define HPE1432_DECIMATION_MIN 	 0
#define HPE1432_ENABLE_TYPE_USER1 	 274
#define HPE1432_ENABLE_TYPE_USER2 	 275
#define HPE1432_FFT_BLOCKSIZE_MAX 	 8192
#define HPE1432_FFT_BLOCKSIZE_MIN 	 64
#define HPE1432_GROUP_INFO_LIST_SOURCE 	 237
#define HPE1432_IRQ_ENABLE 	 0x0008
#define HPE1432_IRQ_PRIORITY 	 0x0007
#define HPE1432_IRQ_PRIORITY_MAX 	 0x0007
#define HPE1432_IRQ_PRIORITY_MIN 	 0x0001
#define HPE1432_IRQ_PRIORITY_NONE 	 0x0000
#define HPE1432_IRQ_SHIFT 	 8
#define HPE1432_LBUS_DISABLE 	 0x0000
#define HPE1432_LBUS_ENABLE 	 0x0001
#define HPE1432_LBUS_PIPE 	 0x0003
#define HPE1432_MAN_ID 	 0xfff
#define	HPE1432_MEAS_WATCHDOG_REG        0x088
#define HPE1432_MODEL_CODE 	 0x201
#define HPE1432_MODEL_CODE_E1432 	 0x201
#define HPE1432_MODEL_CODE_E1433 	 0x202
#define HPE1432_MODEL_CODE_E1434 	 0x203
#define	HPE1432_MODEL_CODE_NOT_BOOTED	 0x200
#define HPE1432_MODULES 	 255
#define HPE1432_MOD_MAX 	 15
#define HPE1432_MULTIPASS 	 621
#define HPE1432_NUM_SPANS_MAX 	 6
#define HPE1432_ONEPASS 	 620
#define HPE1432_ORDER_BLOCKSIZE_MAX 	 8192
#define HPE1432_OVHD 	 2.189784
#define HPE1432_SCAS 	 5
#define	HPE1432_SELFTEST_ALL_MODULES	0x0001
#define	HPE1432_SELFTEST_FAST		0x0002
#define	HPE1432_SELFTEST_LONG		0x0004
#define HPE1432_SELFTEST_VXI		0x0001 /* VXI interface */
#define HPE1432_SELFTEST_ASRAM		0x0002 /* substrate ASRAM */
#define HPE1432_SELFTEST_BSRAM		0x0004 /* substrate ASRAM */
#define HPE1432_SELFTEST_DSP		0x0008 /* 96002 */
#define HPE1432_SELFTEST_96K_HOSTPORT	0x0010 /* 96002 hostport */
#define HPE1432_SELFTEST_PLL		0x0020 /* substrate PLL */
#define HPE1432_SELFTEST_FLASH		0x0040 /* substrate FLASH PROM */
#define HPE1432_SELFTEST_MAIN		0x00ff /* all of the above */
#define HPE1432_SELFTEST_MAIN_IGNORE	0x0000 /* none of the above */
#define HPE1432_SELFTEST_NON_DL		0x0001 /* non download testing */
#define HPE1432_SELFTEST_DL		0x0002 /* download testing */
#define HPE1432_SELFTEST_STD_IO		0x0004 /* std in, out testing */
#define HPE1432_SELFTEST_BASIC		0x0001 /* non download testing */
#define HPE1432_SELFTEST_FULL		0x0003 /* non and download testing */
#define HPE1432_SELFTEST_FULL_STD_IO	0x0007 /* both plus std in, out */
#define HPE1432_SOURCE_COLA_DRPEPPER 	 182
#define	HPE1432_SOURCE_MODE_ARB_ROFF	 188
#define	HPE1432_SOURCE_MODE_BARB_ROFF	 189
#define HPE1432_SOURCE_MODE_BDNLD 	 179
#define HPE1432_SOURCE_MODE_BPRAND 	 185
#define HPE1432_SOURCE_MODE_BPRANDZ 	 187
#define HPE1432_SOURCE_MODE_BUSR 	 181
#define HPE1432_SOURCE_MODE_CLR 	 182
#define HPE1432_SOURCE_MODE_DNLD 	 178
#define HPE1432_SOURCE_MODE_MSINE 	 183
#define HPE1432_SOURCE_MODE_PRAND 	 184
#define HPE1432_SOURCE_MODE_PRANDZ 	 186
#define HPE1432_SOURCE_MODE_USR 	 180
#define HPE1432_SRCBUFFER_CONTINUOUS 	 1
#define HPE1432_SRCBUFFER_INIT_EMPTY 	 1
#define HPE1432_SRCBUFFER_INIT_RESET 	 2
#define HPE1432_SRCBUFFER_INIT_XFER 	 3
#define HPE1432_SRCBUFFER_PERIODIC_A 	 4
#define HPE1432_SRCBUFFER_PERIODIC_AB 	 2
#define HPE1432_SRCBUFFER_SWITCHEDAUTO 	 8
#define HPE1432_SRCBUFFER_SWITCHEDCMD 	 16
#define HPE1432_SRC_DATA_MODE_RAWCMD 	 0x0000000A
#define HPE1432_SRC_DATA_MODE_RAWDATA 	 0x00000009
#define HPE1432_SRC_DATA_MODE_RAWNACKCMD 	 0x0000000E
#define HPE1432_SRC_DATA_MODE_RAWREAD 	 0x0000000B
#define HPE1432_SRC_DATA_MODE_READID 	 0x0000000D
#define HPE1432_SRC_DATA_MODE_READNCLRSTATUS 	 0x0000000F
#define HPE1432_SRC_DATA_MODE_READSTATUS 	 0x0000000C
#define HPE1432_SRC_STATUS_OVERLOAD0 	 0x0800
#define HPE1432_SRC_STATUS_OVERLOAD2 	 0x0400
#define HPE1432_SRC_STATUS_OVERLOAD4 	 0x0200
#define HPE1432_SRC_STATUS_OVERREAD0 	 0x0020
#define HPE1432_SRC_STATUS_OVERREAD2 	 0x0010
#define HPE1432_SRC_STATUS_OVERREAD4 	 0x0008
#define HPE1432_SRC_STATUS_REG 	 0x8f0
#define HPE1432_SRC_STATUS_SHUTDOWN0 	 0x0100
#define HPE1432_SRC_STATUS_SHUTDOWN2 	 0x0080
#define HPE1432_SRC_STATUS_SHUTDOWN4 	 0x0040
#define HPE1432_SRC_XFRBUF_WDS_EMPTY 	 0
#define HPE1432_STATUS_A24_ACTIVE 	 0x8000
#define HPE1432_STATUS_BLOCK_READY 	 0x0800
#define HPE1432_STATUS_CMD_READY 	 0x0001
#define HPE1432_STATUS_DATA_READY 	 0x0400
#define HPE1432_STATUS_DONE 	 0x0080
#define HPE1432_STATUS_ERR_N 	 0x0040
#define HPE1432_STATUS_HW_OK 	 0x0010
#define HPE1432_STATUS_LOADED 	 0x0100
#define HPE1432_STATUS_MODID_N 	 0x4000
#define HPE1432_STATUS_PASSED 	 0x0004
#define HPE1432_STATUS_Q_RESP_READY 	 0x0002
#define HPE1432_STATUS_READY 	 0x0008
#define HPE1432_STATUS_ST_DONE 	 0x0200
#define HPE1432_STATUS_UNUSED1 	 0x0020
#define HPE1432_STATUS_UNUSED2 	 0x1000
#define HPE1432_STATUS_UNUSED3 	 0x2000
#define HPE1432_TACH_CHANS 	 2
#define HPE1432_USER1_DATA 	 350
#define HPE1432_USER2_DATA 	 351
#define HPE1432_WINDOW_USER1 	 713
#define HPE1432_WINDOW_USER2 	 714
#define HPE1432_ZAP_BOOT 	 1
#define HPE1432_ZAP_CLAR_BOOT 	 6
#define HPE1432_ZAP_CLAR_ID_CAL 	 3
#define HPE1432_ZAP_ID_CAL 	 2
#define HPE1432_ZAP_SRC12_BOOT 	 7
#define HPE1432_ZAP_SRC12_ID_CAL 	 4
#define HPE1432_ZAP_SRC34_BOOT 	 8
#define HPE1432_ZAP_SRC34_ID_CAL 	 5


#define ERR1432_DIAG_ERR_UNDIAGNOSED		-1592
#define ERR1432_DIAG_ERR_SUBST			-1593
#define ERR1432_DIAG_ERR_DRAM			-1594
#define ERR1432_DIAG_ERR_TACH			-1595
#define ERR1432_DIAG_ERR_SOURCE_FIT		-1596
#define ERR1432_DIAG_ERR_SOURCE_SCA0		-1597
#define ERR1432_DIAG_ERR_SOURCE_SCA1		-1598
#define ERR1432_DIAG_ERR_INPUT_SCA0		-1599
#define ERR1432_DIAG_ERR_INPUT_SCA1		-1600
#define ERR1432_DIAG_ERR_INPUT_SCA2		-1601
#define ERR1432_DIAG_ERR_INPUT_SCA3		-1602


#define	HPE1432_OCTAVE_AVG_MODE_DEF	760
#define	HPE1432_OCTAVE_HOLD_MODE_DEF	765
#define	HPE1432_OCTAVE_INT_TIME_DEF	1.0
#define	HPE1432_OCTAVE_MODE_DEF		752
#define	HPE1432_OCTAVE_START_FREQ_DEF	3.15
#define	HPE1432_OCTAVE_STOP_FREQ_DEF	20000.0
#define	HPE1432_OCTAVE_TIME_CONST_DEF	0.125
#define	HPE1432_OCTAVE_TIME_STEP_DEF	0.125

#define WARN1432_NO_WARNING                           0
#define WARN1432_LOST_NOT_ENOUGH_TACHS                1
#define WARN1432_LOST_TOO_MANY_TACHS                  2
#define WARN1432_LOST_TOO_MANY_POINTS_REQUIRED        3
#define WARN1432_LOST_DATA_SHIFTED_OUT_FIFO           4
#define WARN1432_LOST_NOT_ENOUGH_DATA_FIFO            5
#define WARN1432_LOST_RPM_TOO_HIGH                    6
#define WARN1432_LOST_RPM_TOO_LOW                     7
#define WARN1432_LOST_RESAMPLE_ERROR                  8
#define WARN1432_LOST_FIFO_EMPTIED                    9
#define WARN1432_RPM_RAMP_TOO_FAST                    10


/* end of misc defines */

#ifdef HPE1432_TRAILER_STRUCT
struct hpe1432_trailer
{
    ViReal32 trig_corr;
    ViReal32 zoom_corr;
    ViReal32 rpm1;
    ViReal32 rpm2;
    ViInt32 gap;
    ViInt32 info;
    ViReal32 peak;
    ViReal32 rms;
};
#endif


ViStatus _VI_FUNC hpe1432_setInternalDebug  (ViSession vi, ViInt32 group, ViInt32 intDebug);

ViStatus _VI_FUNC hpe1432_getInternalDebug  (ViSession vi, ViInt32 group, ViPInt32 intDebug);

ViStatus _VI_FUNC hpe1432_getInternalDebugLimits  (ViSession vi, ViInt32 group, ViPReal64 min, ViPReal64 max, ViPReal64 def, ViPReal64 step);


ViStatus _VI_FUNC hpe1432_initA  (ViRsrc rsrcName, ViBoolean id_query, ViBoolean reset, ViPSession vi);

ViStatus _VI_FUNC hpe1432_initB  (ViRsrc rsrcName, ViBoolean id_query, ViBoolean reset, ViPSession vi);

ViStatus _VI_FUNC hpe1432_initB2  (ViRsrc rsrcName, ViBoolean id_query, ViBoolean reset, ViPSession vi);

ViStatus _VI_FUNC hpe1432_initB3  (ViRsrc rsrcName, ViBoolean id_query, ViBoolean reset, ViPSession vi);

ViStatus _VI_FUNC hpe1432_initC  (ViRsrc rsrcName, ViBoolean id_query, ViBoolean reset, ViPSession vi);

#ifdef INSTR_CALLBACKS
typedef void ( * _VI_FUNCH hpe1432_callbackFunc )(ViInt32 value, ViInt32 reason);
#endif

ViStatus _VI_FUNC hpe1432_displayState  (ViSession vi);

/******   Used by Function hpe1432_setSrcOffMode   *****/
/*  HPE1432_GROUP_ID_MAX  */
/*  HPE1432_GROUP_ID_MIN  */
#define  HPE1432_SRCOFF_MODE_RAMP  0
#define  HPE1432_SRCOFF_MODE_IMMED  1

ViStatus _VI_FUNC hpe1432_getSrcOffMode  (ViSession vi, ViInt32 group, ViPInt32 srcOffMode);

ViStatus _VI_FUNC hpe1432_setSrcOffMode  (ViSession vi, ViInt32 group, ViInt32 srcOffMode);

ViStatus _VI_FUNC hpe1432_setLockMode  (ViSession vi, ViInt32 mode);

ViStatus _VI_FUNC hpe1432_getLockMode  (ViSession vi, ViPInt32 mode);

ViStatus _VI_FUNC hpe1432_getUserDecimation  (ViSession vi, ViInt32 channel, ViPInt32 viparm);

ViStatus _VI_FUNC hpe1432_setUserDecimation  (ViSession vi, ViInt32 channel, ViInt32 dec);

ViStatus _VI_FUNC hpe1432_getUserFramesPerBlock  (ViSession vi, ViInt32 channel, ViPInt32 viparm);

ViStatus _VI_FUNC hpe1432_setUserFramesPerBlock  (ViSession vi, ViInt32 channel, ViInt32 fpb);

/* phpe1432.h follows */
